Address stage logic for generating speculative address operand interim results of preceding instruction by arithmetic operations and configuring

ABSTRACT

An apparatus is presented for expediting the execution of address-dependent micro instructions in a pipeline microprocessor. The apparatus computes a speculative result associated with an arithmetic operation, where the arithmetic operation is prescribed by a preceding micro instruction that is yet to generate a result. The apparatus utilizes the speculative result to configure a speculative address operand that is provided to an address-dependent micro instruction. The apparatus includes speculative operand calculation logic and an update forwarding cache. The speculative operand calculation logic performs the arithmetic operation to generate the speculative result prior to when execute logic executes the preceding micro instruction to generate the result. The update forwarding cache is coupled to the speculative operand calculation logic and temporarily stores the speculative result, where address-dependent micro instructions can retrieve a configured speculative address operand, thereby permitting them to proceed without incurring delay.

CROSS-REFERENCE TO RELATED APPLICATIONS

This application is a continuation of U.S. Patent application Ser. No.09/539,022 entitled ARITHMETIC COMPUTATION OF POTENTIAL ADDRESSES,having a common assignee and common inventors, and filed on Mar. 30,2000, now issued U.S. Pat. No. 6,629,234.

This application is related to U.S. patent application Ser. No.09/434,086, filed on Nov. 5, 1999, entitled UPDATE FORWARDING CACHE FORADDRESS MODE, now issued U.S. Pat. No. 6,442,673, by common inventors,and having the same assignee as this application.

BACKGROUND OF THE INVENTION

1. Field of the Invention

This invention relates in general to the field of instruction executionin computers, and more particularly to an apparatus in a pipelinemicroprocessor for providing speculative address operands toaddress-dependent micro instructions.

2. Description of the Related Art

A pipeline microprocessor has an instruction path, or pipeline, thatsequentially executes instructions from an application program insynchronization with a pipeline clock signal. The instruction pipelineis divided into stages and each of the stages perform specificsub-operations that together accomplish a higher level operationprescribed by a program instruction. The program instructions in theapplication program are executed in sequence by the microprocessor. Asan instruction enters the first stage of the pipeline, certainsub-operations are accomplished. The instruction is then passed tosubsequent stages in the pipeline where subsequent sub-operations areaccomplished. After performing the last set of sub-operations in thelast stage of the pipeline, the instruction completes execution andexits the pipeline. Execution of instructions by a pipelinemicroprocessor is very similar to the manufacture of items on anassembly line.

Early pipeline microprocessors were not sophisticated enough to allowthe execution of multiple instructions in different pipeline stages atthe same time; that is, they executed one instruction at a time. Morespecifically, a given instruction would be fetched from memory and wouldproceed through all of the pipeline stages until it completed execution.Following this, a next instruction would be fetched and proceed throughthe pipeline stages through completion. And although this approach isnot very efficient in terms of instruction throughput, since earlypipeline microprocessors had only a few pipeline stages, the inefficientutilization of stage resources was not deemed to be a significantperformance limitation.

However, as microprocessors began to proliferate, more stringentrequirements were imposed on microprocessor designers, particularly withrespect to instruction throughput. And the obvious approach forincreasing throughput was to provide for the execution of multipleinstructions within the pipeline. Clearly this improvement increasedperformance because resources within each pipeline stage were moreefficiently used. But with this architectural change came a problem:What if one instruction executing in an early pipeline stage required anoperand that was yet to be generated by a preceding instructionexecuting in a subsequent pipeline stage? This issue is in factfrequently confronted in the art because one of the foremostcharacteristics of application programs is that instructions in closeproximity to one another tend to perform tasks using the same operand.For instance, a typical control algorithm within an application programcomputes a true signal value by adding a small number to a currentlygenerated signal value and then the sum is compared to a referencesignal. The structure of the control algorithm is to add a first operandto a second operand to produce a result. Then the result is tested tosee if the computed value is within tolerance. If not, then the firstoperand is added again to the computed result to obtain a second result.Then the second result is tested. And so on. Even in this simplealgorithm it is evident that every other instruction utilizes the lastcomputed result.

When a given instruction executing in one stage of the pipeline requiresan operand that is yet to be generated by a preceding instruction thatis proceeding through a subsequent stage of the pipeline, the giveninstruction is referred to as a dependent instruction. This is becausethe operand required by the dependent instruction depends upongeneration of a result by the preceding instruction.

To deal with dependent instructions, microprocessor designers addedinterlock logic to existing pipeline designs. The interlock logic spansthe stages of a microprocessor where dependencies occur. Duringexecution of a sequence of instructions by the microprocessor,non-dependent instructions are successively advanced through thepipeline stages in synchronization with the clock. However, when adependent instruction is detected, the interlock logic stalls executionof the dependent instruction by inserting slips into the pipeline untilthe operand required by the dependent instruction is generated by apreceding instruction. The number of slips that are inserted into thepipeline directly influence the amount of delay that is experienced byan application program executing on the microprocessor. Two factorsdrive the number of slips that are inserted: 1) the separation in theinstruction pipeline between the preceding instruction and the dependentinstruction; and 2) the number of clock cycles that are needed by thepreceding instruction to actually generate the operand. This applicationfocuses on problems associated with the separation between the twoinstructions in the pipeline.

In general, program instructions use operands for two distinct types ofcomputations in a present day microprocessor: address computations andresult computations. Address computations are performed early in thepipeline by address stage logic to compute addresses of memory operandsthat are to be loaded from memory or stored to memory. Resultcomputations are performed in a later execution stage of themicroprocessor to carry out arithmetic, logical, or other operationsprescribed by program instructions.

A particular class of dependencies called address dependency occurs whena preceding instruction has not yet generated a result of a resultcomputation that is presently required as an operand for adependent-instruction for use in an address computation. The instructionprescribing the address computation is called an address-dependentinstruction. And because the address-dependent instruction requires theresult that has not yet been generated by the preceding instruction, theinterlock logic prevents the address-dependent instruction fromproceeding in the pipeline until the preceding instruction generates andprovides the result.

If there are only two pipeline stages separating the address computationlogic from the result computation logic, then at least two slips must beinserted into the pipeline to delay the address-dependent instructionuntil the preceding instruction provides the result. But if there are 10stages separating the address computation logic from the resultcomputation logic, then at least 10 slips are required. Furthermore,microprocessor designers are progressively increasing the number ofstages in microprocessor pipelines to provide overall throughputimprovements. Consequently, these improvements negatively impactaddress-dependency delays because address-dependent instructions must bestalled for a greater number of clock cycles.

Therefore, what is needed is an apparatus in a pipeline microprocessorthat allows address-dependent instructions to proceed withoutexperiencing stalls.

In addition, what is needed is an interim result computation apparatusthat can provide speculative address operands to address-dependentinstructions prior to when a preceding instruction generates a finalresult.

Furthermore, what is needed is an apparatus for generating andtemporarily storing intermediate results, and for providing theseresults to address-dependent instructions, thus allowing theaddress-dependent instructions to proceed without being delayed.

SUMMARY OF THE INVENTION

To address the above-detailed deficiencies, it is an object of thepresent invention to provide a pipeline microprocessor apparatus forspeculatively permitting address-dependent instructions to proceedwithout experiencing delays.

Accordingly, in the attainment of the aforementioned object, it is afeature of the present invention to provide an apparatus in a pipelinemicroprocessor for providing a speculative address operand associatedwith a result of a first arithmetic operation, the first arithmeticoperation being prescribed by a first preceding micro instruction. Theapparatus includes speculative operand calculation logic within anaddress stage of the pipeline microprocessor and an update forwardingcache. The speculative operand calculation logic performs arithmeticoperations to generate interim results prior to when execute logicexecutes corresponding preceding micro instructions to generateassociated results, where the first preceding micro instruction is oneof the corresponding preceding micro instructions. The update forwardingcache is coupled to the speculative operand calculation logic. Theupdate forwarding cache temporarily stores the interim results, where anaddress-dependent micro instruction, upon entry into a previous registerstage can retrieve the speculative address operand. The speculativeaddress operand is configured from one of more of the interim results,thereby permitting the address-dependent micro instruction to proceedwithout incurring delay. The speculative address operand is to beobtained from the result that is to be generated when the execute logicexecutes the first preceding micro instruction, and wherein the resulthas not yet been generated by the execute logic and written to aregister file for access by following micro instructions.

An advantage of the present invention is that application programs arenot delayed when address dependencies are associated with arithmeticresults.

Another object of the present invention is to provide an apparatus in apipeline microprocessor for computing interim results that can providespeculative address operands to address-dependent instructions prior towhen a preceding instruction generates a final result.

In another aspect, it is a feature of the present invention to provide aspeculative operand apparatus in a pipeline microprocessor. Thespeculative operand apparatus includes address stage logic, aspeculative operand cache, and speculative operand configuration logic.The address stage logic generates a memory address prescribed by anaddress-dependent micro instruction. The address stage logic has aspeculative address operand calculator, for generating interim resultsby performing arithmetic operations prescribed by preceding microinstructions, where the interim results include a first interim resultthat is generated by performing a first arithmetic operation prescribedby a first preceding micro instruction, and where the arithmeticoperations are performed prior to generation of final results byexecuting the preceding micro instructions. The speculative operandcache is coupled to the address stage logic. The speculative operandcache temporarily stores the interim results. The speculative operandconfiguration logic is coupled to the speculative operand cache. Thespeculative operand configuration logic accesses one or more of theinterim results to configure a speculative address operand correspondingto contents of a register prescribed by the address-dependent microinstruction, thereby permitting the memory address to be generated inlieu of a stall.

Another advantage of the present invention is that the present inventionprovides an apparatus to improve the performance of application programsthat is insensitive to the number of stages separating address-dependentinstructions from preceding instructions. A further object of theinvention is to provide a microprocessor apparatus that generates andtemporarily stores interim results, whereby these interim results can beaccessed by address-dependent instructions and used as speculativeaddress operands.

A further advantage of the present invention is that address generationinterlock stalls are not required when an address-dependent instructionrequires the result of an arithmetic computation prescribed by apreceding instruction.

Accordingly, in the attainment of the aforementioned object, it is afeature of the present invention to provide an apparatus in a pipelinemicroprocessor for providing a speculative address operand associatedwith a result of an arithmetic operation, where the arithmetic operationis prescribed by a preceding micro instruction. The apparatus includesspeculative operand calculation logic and an update forwarding cache.The speculative operand calculation logic performs the arithmeticoperation to generate the speculative address operand prior to whenexecute logic executes the preceding micro instruction to generate theresult. The update forwarding cache is coupled to the speculativeoperand calculation logic. The update forwarding cache temporarilystores the speculative address operand, where an address-dependent microinstruction can retrieve the speculative address operand, therebypermitting the address-dependent micro instruction to proceed withoutincurring delay.

An advantage of the present invention is that application programs arenot delayed when address dependencies are associated with arithmeticresults.

Another object of the present invention is to provide an apparatus in apipeline microprocessor for computing interim results that can providespeculative address operands to address-dependent instructions prior towhen a preceding instruction generates a final result.

In another aspect, it is a feature of the present invention to provide aspeculative operand apparatus in a pipeline microprocessor. Thespeculative operand apparatus has address stage logic, a speculativeoperand cache, and speculative operand configuration logic. The addressstage logic generates a memory address prescribed by anaddress-dependent micro instruction. The address stage logic includes aspeculative address operand calculator. The speculative address operandcalculator generates a first interim result by performing an arithmeticoperation prescribed by a preceding micro instruction, where thearithmetic operation is performed prior to generation of a final resultby the preceding micro instruction. The speculative operand cache iscoupled to the address stage logic and temporarily stores the firstinterim result. The speculative operand configuration logic is coupledto the speculative operand cache. The speculative operand configurationlogic accesses the first interim result to configure a speculativeaddress operand corresponding to contents of a register prescribed bythe address-dependent micro instruction, thereby permitting the memoryaddress to be generated in lieu of a stall.

Another advantage of the present invention is that the present inventionprovides an apparatus to improve the performance of application programsthat is insensitive to the number of stages separating address-dependentinstructions from preceding instructions.

A further object of the invention is to provide a microprocessorapparatus that generates and temporarily stores interim results, wherebythese interim results can be accessed by address-dependent instructionsand used as speculative address operands.

In a further aspect, it is a feature of the present invention to providea microprocessor apparatus for providing a speculative operand to anaddress-dependent micro instruction, the speculative operandcorresponding to a result of a preceding arithmetic micro instruction,where the result is yet to be generated by execute stage logic in themicroprocessor. The apparatus includes an opcode decoder, intermediateresult calculation logic, operand cache entries, and speculative operandconfiguration logic. The opcode decoder evaluates an opcode of thepreceding arithmetic micro instruction. The intermediate resultcalculation logic is coupled to the opcode decoder. The intermediateresult calculation logic generates intermediate results corresponding toarithmetic micro instructions. The intermediate result calculation logichas addition logic and subtraction logic. The addition logic generatesadditive intermediate results. The subtraction logic generatessubtractive intermediate results. The operand cache entries are coupledto the intermediate result calculation logic. The operand cache entriestemporarily store the additive intermediate results and the subtractiveintermediate results. The speculative operand configuration logic iscoupled to the operand cache entries. The speculative operandconfiguration logic selects words from selected operand cache entries toconfigure the speculative operand.

A further advantage of the present invention is that address generationinterlock stalls are not required when an address-dependent instructionrequires the result of an arithmetic computation prescribed by apreceding instruction.

BRIEF DESCRIPTION OF THE DRAWINGS

These and other objects, features, and advantages of the presentinvention will become better understood with regard to the followingdescription, and accompanying drawings where:

FIG. 1 is a block diagram illustrating stages of a related art pipelinemicroprocessor.

FIG. 2 is a table illustrating execution of an address-dependent microinstruction by the microprocessor of FIG. 1, where an operand requiredby the address-dependent micro instruction is a result of an arithmeticoperation prescribed by a preceding micro instruction.

FIG. 3 is a block diagram of a microprocessor according to the presentinvention featuring an update forwarding cache for temporarily storingand providing speculative address operands.

FIG. 4 is a block diagram illustrating details of an update forwardingcache according to the present invention.

FIG. 5 is a block diagram illustrating interim arithmetic resultcalculation logic within the address stage of a microprocessor accordingto the present invention.

FIG. 6 is a table illustrating execution of an address-dependent microinstruction by a microprocessor according to the present invention.

DETAILED DESCRIPTION

In light of the above background on techniques for executing programinstructions in a pipeline microprocessor, several related art exampleswill now be discussed with reference to FIGS. 1 and 2. These exampleshighlight the problems encountered in a pipeline microprocessor when anaddress-dependent micro instruction immediately requires the result of apreceding micro instruction, where the result has not yet been generatedby the preceding micro instruction. More specifically, in this situationthe address-dependent micro instruction must be stalled in the pipelineuntil the preceding micro instruction is executed to the point that theresult is generated. Following this discussion, a detailed descriptionof the present invention will be provided with reference to FIGS. 3through 6. The present invention provides an apparatus that computes andstores speculative address operands resulting from arithmetic operationsprior to execution of the instructions prescribing the arithmeticoperations, thereby allowing address-dependent micro instructions toaccess these operands without experiencing a stall.

Referring to FIG. 1, a block diagram is presented illustrating stages ofa related art pipeline microprocessor 100. The microprocessor 100includes a fetch stage 101, translate stage 102, register stage 103,address stage 104, load stage 105, align stage 106, execute stage 107,store stage 108, and write back stage 109. The microprocessor also hasinterlock logic 110 coupled to each of the pipeline stages 101-109.

In operation, the fetch stage 101 retrieves macro instructions fromexternal memory (not shown) that are to be executed by themicroprocessor 100. The translate stage 102 translates, or decodes, thefetched macro instructions into associated micro instructions. Theregister stage 103 retrieves operands specified by the microinstructions from a register file (not shown) for use by logic (notshown) within subsequent stages 104-109 of the pipeline. The addressstage 104 generates memory addresses specified by the micro instructionsto be used in data storage and retrieval operations. The load stage 105reads data from the external memory to access memory operands using theaddresses generated in the address stage 104. The align stage 106extracts the memory operands from the data and aligns the memoryoperands for execution. The execute stage 107 performs arithmetic,logical, or other prescribed operations to generate results using theoperands retrieved from the register file and/or memory. The store stage108 writes the results generated by the execute stage 107 or theoperands retrieved from the register file to external memory at thememory addresses calculated by logic in the address stage 104. The writeback stage 109 updates registers in the register file with the resultsgenerated in the execute stage 107 or with operands retrieved frommemory by the load stage 105. Micro instructions proceed in sequencethrough each successive stage of the pipeline in synchronization with apipeline clock signal (not shown). To achieve optimum pipelineperformance, while a given micro instruction is executing in a givenstage of the pipeline, a preceding micro instruction should be executingin a subsequent pipeline stage and a following micro instruction shouldbe executing in a previous pipeline stage. In other words, during anygiven clock cycle, all stages 101-109 of the microprocessor 100 shouldbe performing their architected functions; no stage should be idle.

But optimum pipeline throughput is rarely attained because of thetremendous diversity of operations that can be prescribed by programinstructions and the almost infinite number of ways in which theseoperations can be combined within software application programs.Consequently, the interlock logic 110 is necessary to control the flowof instructions in the pipeline. For instance, if a micro instruction inthe execute stage 107 requires more than one cycle of the pipeline clockto generate a result, then the interlock logic 110 must stall followinginstructions that are in previous stages 101-106 of the pipeline toprevent the following instructions from prematurely advancing. Precedinginstructions that are in subsequent pipeline stages 108-109 are allowedto proceed forward through the pipeline, but since the micro instructioncausing the stall remains within the execute stage 107, a “slip” or voidis inserted into the store stage 108 during each clock cycle that itremains within the execute stage 107. These slips propagate through thepipeline with each cycle of the clock. Slips cause delays during theexecution of application programs.

Because slips are undesirable, microprocessor designers tailor thefunctions performed and logic provided within the stages 101-109 of amicroprocessor 100 to minimize the probability that slips will occur.And one of the most significant causes of slips in a present daypipeline microprocessor 100 ensues from what is referred to as adependency case. A dependency case exists when a second microinstruction follows a first micro instruction in the execution order,and the second micro instruction requires an operand from the registerstage 103, but the operand has not yet been provided to the registerstage 103 because it is a result of an operation prescribed by the firstmicro instruction which is yet to be generated. That is, the operationprescribed by the first micro instruction has not yet been executed toyield the result at the time the result is required by the second microinstruction. In general, when a dependency case is detected within thetranslate stage 102, the interlock logic 110 stalls the second microinstruction and inserts slips into the pipeline until the result of thefirst micro instruction is generated by the execute stage 107 and iswritten back into the register file by logic in the write back stage109. Once the result is written back into the register file, theinterlock logic 110 allows the second micro instruction to proceed intothe register stage 103 so it can fetch its operand.

One skilled in the art will appreciate that the microprocessor 100 ofFIG. 1 is representative of more recent microprocessors in productiontoday because several pipeline stages are provided. Some more recentmicroprocessors may have slightly more architected stages than what areshown in FIG. 1; some may have slightly less architected stages. Butwhat is significant to note from FIG. 1, however, is that only twostages access the register file: the register stage 103 and the writeback stage 109. And as was briefly stated above, a typical microinstruction retrieves its prescribed operands from the register file inthe register stage 103. Within the execute stage 107, execution logic(not shown) performs a prescribed operation using the prescribedoperands to generate a result. And within the write back stage 109, theresult of the prescribed operation is typically stored to a destinationregister in the register file so that the result can be accessed byfollowing micro instructions. In contrast to early microprocessors, morerecent microprocessors have more stages within their pipeline to providefor an increase in throughput. However, a negative byproduct ofincreasing the number of stages is that dependency cases require agreater number of pipeline slips because of the increased number ofstages separating the register stage 102 and the write back stage 109.

Dependency related stalls, or dependency interlocks, can occur for anumber of different reasons, but typically dependency interlocks fallinto two distinct categories: result generation interlocks (RGIs) andaddress generation interlocks (AGIs). What drives the distribution ofinterlocks into these two categories is that operands within a pipelinemicroprocessor 100 are generally used for two corresponding types ofcomputations: result computations in the execute stage 107 and addresscomputations in the address stage 104. That is, result-dependentoperands associated with an RGI are required by a micro instruction fora result computation within the execute stage 107; address-dependentoperands corresponding to an AGI are required by a micro instruction foran address computation within the address stage 104. This applicationdeals with the problems associated with the latter category ofinterlocks, address generation interlocks.

Now referring to FIG. 2, a table 200 is presented illustrating executionof an address-dependent micro instruction by the microprocessor of FIG.1, where the operand required by the address-dependent micro instructionis a result of an arithmetic operation directed by a preceding microinstruction. Three macro instructions, a first macro instruction,designated ADD EAX,25; a second macro instruction, designated SUBEBX,27; and a third macro instruction, designated MOV ECX, [EAX]; areshown in the Translate column of the table 200. For clarity ofdiscussion, a column corresponding to the Fetch stage 101 is not shown.The marks *** designate non-relevant instructions before or after theinstructions of interest. The marks --- designate slips that areinserted into the pipeline by the interlock logic 110. Progression ofinstructions through noted stages of the pipeline is shown with respectto cycles of a pipeline clock.

The ordering of the three macro instructions in the Translate column iswhat establishes an address-dependency case. More specifically, thefirst macro instruction directs logic in the execute stage 107 of themicroprocessor 100 to add the contents of register EAX in the registerfile with a first immediate operand, 25, and to write back the result ofthe addition into register EAX. The second macro instruction directslogic in the execute stage 107 of the microprocessor 100 to subtract asecond immediate operand, 27, from the contents of register EBX in theregister file, and write back the result of the subtraction intoregister EBX. The third macro instruction directs the microprocessor 100to load the contents of a location in memory into register ECX. And theaddress operand used to generate the address of the memory location iscontained within register EAX. Hence, to compute the address of thememory location, logic in the address stage 104 must read register EAXin the register stage 103 and provide this address operand to addresscomputation logic in the address stage 104. But the contents of registerEAX required for the address computation will not be available foraccess by following instructions until the result of the additionprescribed by the first macro instruction is written back into registerEAX. Hence, the third macro instruction, MOV ECX, [EAX], is said to beaddress-dependent upon the first macro instruction, ADD EAX,25, becausethe address operand required by the third macro instruction is theresult of the first macro instruction. Because an address dependencyexists between the first and third macro instructions, the interlocklogic 110 must monitor and control progression of these instructionsthrough the microprocessor pipeline.

During cycle 1, the first macro instruction, ADD EAX,25, proceedsthrough the translate stage 102. Therein, the first macro instruction isdecoded into a first micro instruction, designated ADD EAX,EAX,25. Morespecifically, an opcode field, ADD, prescribes the operation that is toperformed, that is, to fetch the contents of a source register, EAX, inthe register stage 103, to add the contents of EAX with the firstimmediate operand, 25, and to write back the result of the additiongenerated in the execute stage 107 into destination register EAX. Thedestination register is generally explicitly specified as the fieldfollowing the opcode of a micro instruction. A first source operandspecifier follows the destination register, and a second source operandspecifier follows the first source operand specifier.

During cycle 2, the first micro instruction proceeds through theregister stage 103. Therein, contents of register EAX are retrieved fromthe register file. In addition during cycle 2, the second macroinstruction, SUB EBX,27, proceeds through the translate stage 102.Therein, the second macro instruction is decoded into a second microinstruction, designated SUB EBX,EBX,27. More specifically, an opcodefield, SUB, prescribes the operation that is to performed, that is, tofetch the contents of a source register, EBX, in the register stage 103,to subtract the second immediate operand, 27, from the contents of EBX,and to write back the result of the subtraction generated in the executestage 107 into destination register EBX.

During cycle 3, the first micro instruction proceeds through the addressstage 104. Therein, no operation is performed. This is because logicwithin the address stage 104 is dedicated to performing addresscomputations and the first micro instruction prescribes an arithmeticoperation to be performed in the execute stage 107. Since the firstmicro instruction does not require generation of an address, it passesthrough the address stage 104. Also during cycle 3, the second microinstruction proceeds through the register stage 103. Therein, thecontents of register EBX are retrieved from the register file. Inaddition during cycle 3, the third macro instruction proceeds throughthe translate stage 102. Therein, the third macro instruction is decodedinto a third micro instruction, designated LD ECX, [EAX]. Morespecifically, an opcode field, LD, prescribes the operation that is toperformed, that is, to load the contents of a memory location intodestination register ECX. The address operand used to compute theaddress of the memory location is prescribed as the contents of registerEAX in the register stage 103.

During cycle 4, the first micro instruction proceeds through the loadstage 105. Therein, no operation is performed because the first microinstruction does not prescribe a memory load; it prescribes anarithmetic operation that is to be performed in the execute stage 107.Also during cycle 4, the second micro instruction proceeds through theaddress stage 104. Therein, no operation is performed. This is because,like the first micro instruction, the second micro instructionprescribes an arithmetic operation to be performed in the execute stage107 rather than generation of an address in the address stage 104. Inaddition during cycle 4, the interlock logic 110 stalls the third microinstruction in the translate stage 102 because an address dependencycase is detected. More specifically, to compute the memory addressprescribed by the third micro instruction, LD ECX, [EAX], the contentsof register EAX must be retrieved by the third micro instruction in theregister stage 103. But the interlock logic 110 detects that a precedingmicro instruction, ADD EAX,EAX,25, has prescribed register EAX as aresult destination register, and the result of the addition has not yetbeen generated because the preceding micro instruction is only withinthe load stage 105 during cycle 4. Consequently, the interlock logic 110stalls the third micro instruction and inserts a slip 201 into thepipeline during this cycle, resulting in an address-generation interlock(AGI).

During cycle 5, the interlock logic 110 allows the first and secondmicro instructions to proceed through the align stage 106 and the loadstage 105, respectively. No operations are performed in these stages106, 105 because the two micro instructions do not prescribe memory loadoperations. In addition during cycle 5, another AGI slip 201 is insertedinto the pipeline by the interlock logic 110 because the contents ofregister EAX are yet to be provided.

During cycle 6, the first micro instruction proceeds through the executestage 107. Therein, the prescribed addition operation is performed and aresult of the addition is generated. Yet, even though the result isgenerated in the execute stage 107, it will not be written back into thedestination register, EAX, until the first micro instruction proceedsthrough the write back stage 109. In addition during cycle 6, the secondmicro instruction proceeds through the align stage 106. Since the secondmicro instruction does not prescribe an memory load operation, nooperation is performed. Also during cycle 6, another AGI slip 201 isinserted into the pipeline by the interlock logic 110 because thecontents of register EAX are not yet written back into the registerfile.

During cycle 7, the first micro instruction proceeds through the storestage 108. Since no memory store operation is prescribed, the firstmicro instruction passes through the store stage 108. Also during cycle7, the second micro instruction proceeds through the execute stage 107,therein performing the prescribed subtraction to yield a subtractionresult destined for register EBX. In addition during cycle 7, yetanother AGI slip 201 is inserted into the pipeline by the interlocklogic 110 because the contents of register EAX are not yet available forretrieval from the register file.

During cycle 8, the first micro instruction proceeds through the writeback stage 109, therein storing the result of the addition operation inregister EAX. The contents of register EAX are therefore available forretrieval by following micro instructions during this clock cycle. Atthis point execution of the first micro instruction is complete. Alsoduring cycle 8, the second micro instruction proceeds through the storestage 108. Since no memory store operation is prescribed, the secondmicro instruction passes through the store stage 108. And during cycle8, the interlock logic 110 releases the interlock on the third microinstruction, thus allowing it to proceed through the register stage 103.Therein, the third micro instruction retrieves the contents of registerEAX which were generated as a result of the addition prescribed by thefirst micro instruction.

During cycle 9, the second micro instruction completes execution in thewrite back stage 109 by storing the subtraction result in register EBX.Also during cycle 9, the third micro instruction proceeds through theaddress stage 104. Therein, the address of the memory location for theload operation is generated by address generation logic using thecontents of EAX as an address operand.

Address dependency cases like that illustrated in the table 200 causeconsiderable delays in application programs. Note that the third microinstruction experiences four AGI slips 201 while waiting for thecontents of register EAX to be made available. In addition, the slips201 incurred by address-dependent micro instructions will become moresevere as processor designs evolve because the design trend is towardsincreasing the number of pipeline stages 101-109, and consequently,increasing the number of slips 201 experienced by address-dependentmicro instructions.

At first glance, it would appear that the address dependency problemswithin a present day microprocessor 100 as described with reference toFIGS. 1 and 2 are insurmountable because it is impossible to obtain theresult of a computation prior to when the computation is performed. Andin fact, the case illustrated in FIG. 2 does not reflect the use ofresult forwarding logic. Result forwarding logic are a series of busesemployed by most present day microprocessors to make a computed resultavailable to all stages of the pipeline as soon as the result isgenerated by the execute stage 107. But even if result forwarding logicis employed by the microprocessor 100 in this case, the needed resultwould still not be available for use until cycle 6 of the pipelineclock. And by cycle 6, the address-dependent micro instruction wouldhave already incurred two AGI slips 201 at the time that the resultforwarding logic makes the result available for use.

The present inventors, however, have observed that certain microinstructions, specifically those micro instructions that prescriberegister/register or register/immediate addition and subtractionoperations, merely pass through the address stage 104 of themicroprocessor 100 because these micro instructions do not require anaddress computation. Furthermore, it is noted that address logic withina typical address stage 104 has the capability to perform simplearithmetic, particularly in an x86-compatible microprocessor, becauseaddition is required to generate x86-compatible addresses.

Therefore, the present invention is provided to overcome one class ofaddress-generation interlocks experienced by present daymicroprocessors: AGIs depending from micro instructions prescribingregister/register and register/immediate addition and subtractionoperations. By providing apparatus to speculatively perform thesearithmetic operations and temporarily store the results of theseoperations within an address stage of a microprocessor according to thepresent invention, following address-dependent micro instructions do notincur any AGI stalls whatsoever. The present invention is morespecifically described with reference to FIGS. 3 through 6.

Referring to FIG. 3, a block diagram is presented of a microprocessor300 according to the present invention featuring an update forwardingcache 311 for temporarily storing and providing speculative addressoperands. The microprocessor 300 includes a fetch stage 301, translatestage 302, register stage 303, address stage 304, load stage 305, alignstage 306, execute stage 307, store stage 308, and write back stage 309.In addition, the microprocessor 300 includes an update forwarding cache311 that is coupled to the register stage 303 and the address stage 304.

In operation, the fetch stage 301 retrieves instructions from externalmemory (not shown) that are to be executed by the microprocessor 300.The translate stage 302 translates the fetched instructions intoassociated micro instructions. The register stage 303 retrieves operandsspecified by the micro instructions from a register file (not shown) foruse within subsequent stages 304-309 in the pipeline. In addition,address-dependent micro instructions proceeding through the registerstage 303 access speculative address operands from the update forwardingcache 311, for use in the computation of addresses in the address stage304. The address stage 304 calculates memory addresses prescribed by themicro instructions to be used in data storage and retrieval operations.In addition to generating memory addresses, the address stage 304detects and speculatively executes register/register andregister/immediate addition and subtraction micro instructions togenerate interim results. The interim results are temporarily storedwithin update forwarding cache 311 for access by followingaddress-dependent micro instructions which would otherwise be stalled inthe translate stage 302. The load stage 305 reads data from memory usingthe address generated in the address stage 304. The align stage 306extracts memory operands from the retrieved data and aligns the memoryoperands for execution. The execute stage 307 performs arithmetic,logical, or other prescribed operations to generate results. The storestage 308 writes results or register operands to memory using theaddress calculated in the address stage 304. The write back stage 309updates registers in the register file with the results generated in theexecute stage 307 or with memory operands retrieved from memory by theload stage 305.

The update forwarding cache 311 is a feature of the present inventionthat is described in U.S. patent application Ser. No. 09/434,086, filedon Nov. 5, 1999, entitled UPDATE FORWARDING CACHE FOR ADDRESS MODE, bycommon inventors, and having the same assignee as this application,which is herein incorporated by reference. In the referencedapplication, the update forwarding cache 311 is provided as a temporarystorage means for address operands computed in the address stage 304that may be required by following micro instructions. For example, someregisters in an x86-compatible microprocessor implicitly containaddresses such as a stack pointer register (i.e., register ESP) orstring pointer registers (i.e., registers ESI and EDI). When certainstack manipulation instructions (e.g., PUSH or POP) or stringmanipulation instructions (e.g., MOVS, CMPS, or LODS) proceed throughthe address stage 304, the contents of these registers are automaticallymodified. And the update forwarding cache 311 is provided in thereferenced application to preclude AGIs associated with the execution ofaddress-dependent micro instructions that reference stack manipulationand string pointer registers.

The present inventors now exploit availability of the update forwardingcache 311 by incorporating logic in the address stage 304 to detectaddition and subtraction micro instructions that do not prescribe memoryoperands, and to speculatively perform the arithmetic operationsprescribed by these micro instructions to generate intermediate results.The intermediate results are temporarily stored in the update forwardingcache 311 and are made available to following address-dependent microinstructions in the form of speculative address operands. Followingaddress-dependent micro instructions obtain these speculative addressoperands from the update forwarding cache 311 upon entry into theregister stage 303, prior to when final results corresponding to theaddition and subtraction micro instructions are generated by executelogic in the execute stage 307. The operands obtained from the updateforwarding cache 311 are referred to as speculative address operandsbecause they do no reflect the final results of micro instructions thathave completed execution in the pipeline without error or exception. Butfor micro instructions that do complete execution without error orexception, the intermediate results of the arithmetic operationsgenerated in the address stage 304 are identical to the final resultsgenerated in the execute stage 307. By utilizing logic in the addressstage 304 that would not otherwise be employed by arithmeticregister/register and register/immediate micro instructions, the presentinvention affords a significant performance improvement for present daymicroprocessors.

As an address-dependent micro instruction proceeds through the registerstage 303, it provides an operand tag, OPERAND TAG, to the updateforwarding cache 311 prescribing a register that is to contain anaddress operand. The address operand corresponds to the final result ofa preceding micro instruction, where the final result has not yet beengenerated by execute logic in the execute stage 307 and written back bywrite back logic 309 to the register so that it is available for accessby following micro instructions. But if the preceding micro instructionis an arithmetic micro instruction as described above, then its interimresult is already generated and available within the update forwardingcache 311. The update forwarding cache 311 thus accesses the interimresult and configures a speculative address operand and provides it tothe address-dependent micro instruction, thereby allowing theaddress-dependent micro instruction to proceed without experiencing anAGI.

The update forwarding cache 311 is an array of storage elements forstoring multiple intermediate address/result operands along withassociated tag information for a corresponding number of preceding microinstructions, that is, the number of previously modified intermediateaddress operands/results which are required to configure and provide aspeculative address operand to an address-dependent micro instructionproceeding through the register stage 303. Since more than oneintermediate address operand or interim result may be destined for thesame register in the register file, the update forwarding cache 311 alsomaintains information pertaining to each intermediate operand/resultindicating its relative priority for substitution purposes. In oneembodiment, the update forwarding cache 311 contains four storageelements corresponding to four preceding intermediate addressoperands/results. Thus, when a micro instruction proceeds through theregister stage 303, its address operand register tag is provided to theupdate forwarding cache 311. The update forwarding cache 311, in turn,configures a speculative address operand from the most recentlygenerated words of intermediate operands/results therein whose registertags match the provided register tag. In addition, the update forwardingcache 311 provides speculative address operands in accordance theaddress mode (i.e., 16-bit or 32-bit) that is specified. Detailsconcerning operation of the update forwarding cache 311 according to thepresent invention are more specifically discussed with reference to FIG.4.

Referring to FIG. 4, a block diagram is presented illustrating detailsof an update forwarding cache 400 according to the present invention. Inone embodiment, the update forwarding cache 400 has an address selector404 that receives an address operand tag from an address-dependent microinstruction in the register stage of a microprocessor according to thepresent invention. The address operand tag designates a correspondingaddress operand register in a register file and also prescribes theaddress mode (i.e., the address operand size: 16-bit or 32-bit). Theaddress selector 404 is coupled to a tag array 410. Buffer entries inthe tag array 410 each have a priority field 411, an intermediateoperand/result register field 412, and a word enable field 413. The tagbuffer 410 receives its entries from update logic 402. The update logic402 is coupled to address stage logic in a microprocessor according tothe present invention.

The update logic 402 provides intermediate address operands orintermediate arithmetic operation results to an intermediateoperand/result array 420 having entries that correspond to entries inthe tag array 410. Each entry in the intermediate operand/result array420 has a corresponding priority field 421 and an intermediateoperand/result field 422.

The intermediate operand/result array 420 is indexed by the addressselector 404 and a word selector 406. Outputs from the intermediateoperand/result buffers 420 are provided to speculative address operandconfiguration logic 408. The speculative operand configuration logic 408provides a configured speculative address operand back to the requestingmicro instruction in the register stage.

Operationally, each time the address stage logic executes a microinstruction that generates an intermediate address operand/result, ADDROP, it is provided to the update logic 402 along with a correspondingoperand/result register tag, REG TAG, and a operand/result sizespecifier, WD ENABLE. ADDR OP is written to a most recently generatedentry in the intermediate operand/result array 420, in this embodiment,the entry having priority field 421 equal to 1. In parallel, the tag andsize specifiers are written to the corresponding most recently generatedentry in the tag array 410 (priority 1). When a new intermediateoperand/result is entered into the update forwarding cache 400, contentsof the tag array 410 and intermediate operand/result array 420 aremanipulated such that a least recently generated intermediateoperand/result and corresponding tag and size specifiers are cast out orthe arrays 410, 420. One skilled in the art will appreciate thatmanipulating the array contents is just one technique available forindicating priority. In an alternative embodiment, the least recentlygenerated address operand data is simply overwritten by the mostrecently generated address operand and the priority fields 411, 421 aremodified. Thus, the four most recently generated intermediateoperands/results are maintained in the embodiment of the updateforwarding cache 400 presented in FIG. 4. For example, contents of thetag array 410 indicate that the most recently generated intermediateoperand/result (i.e., priority 1) comprises a 32-bit intermediate resultcorresponding to destination register EAX in the register file. Theintermediate operand/result corresponding to priority 2 (i.e., theintermediate operand/result generated prior to the priority 1intermediate operand/result) comprises a 16-bit intermediate resultcorresponding to register BX in the register file. The priority 3intermediate operand/result is a 16-bit address operand corresponding toaddress register DI. And the priority 4 intermediate operand/result is a32-bit address operand destined for address register ESI.

In one embodiment, when a micro instruction proceeds through theregister stage, its operand/result tag, OP TAG, is provided to theaddress selector 404. The address selector 404 evaluates tag arrayentries to select the most recently written intermediate operand/resultwords that have corresponding destination registers matching theoperand's tag. In addition, words are selected based upon the addressmode (i.e., the size) of the specified address operand tag and that ofthe intermediate operands/results. In one embodiment, the addressselector 404 enables words in the intermediate operand/result array 420for configuration of the speculative address operand by providing rowand column information via the WD EN, and ROW signals.

The enabled words in the intermediate operand/result array 420 arepassed to the speculative address operand configuration logic 408. Thespeculative address operand configuration logic 408 assembles theenabled words into the operand and provides the speculative addressoperand to a requesting address-dependent micro instruction in theregister stage. One skilled in the art will appreciate that increasingthe number of stages in a microprocessor according to the presentinvention requires only additional entries in the tag array 410 andintermediate operand/result array 420. Neither timing requirements norpower requirements for the update forwarding cache 400 would benegatively impacted by an increase in the number of pipeline stages.

Now referring to FIG. 5, a block diagram is presented illustratinginterim arithmetic result calculation logic 500 within the address stageof a microprocessor according to the present invention. In oneembodiment, the interim result calculation logic 500 includes anarithmetic opcode decoder 521 that reads an opcode field 511 from amicro instruction register 510. The arithmetic opcode decoder 521provides an arithmetic operation selection output 522, ADD/SUB#, to afirst input mux 523, a second input mux 524, and an intermediate resultmux 527. A first source operand field 512 of the micro instructionregister 510 is provided to the first input mux 523. A second sourceoperand field 513 of the micro instruction register 510 is provided tothe second input mux 524. Outputs of the first and second input muxes523, 524 are routed to intermediate result calculation logic 528. Theintermediate result calculation logic 528 includes an adder 525 and asubtractor 526. In one embodiment, the adder 525 is the addresscomputation logic used within the address stage for calculation ofmemory addresses. The adder 525 provides a sum output, A+B, and a wordenable output, AWDEN, to the intermediate result mux 527. The subtractor526 provides a difference output, A−B, and a word enable output, SWDEN,to the intermediate result mux 527. The intermediate result mux 527provides an interim result output 532, ADDR OP, and a word enable output533, WDEN, to an update forwarding cache according to the presentinvention. In addition, contents of a destination register field 514from the micro instruction register 510 are routed to the updateforwarding cache via bus 531, REG TAG.

In operation, when a micro instruction proceeds through the addressstage, the arithmetic opcode detection logic 521 evaluates the microinstruction's opcode 511 to determine if it falls into the class ofinstructions for which intermediate arithmetic results are generated. Inone embodiment, all addition and subtraction micro instructions that donot prescribe operands in memory are speculatively executed to generateintermediate results. In a x86-compatible microprocessor embodiment,these addition and subtraction micro instructions are generated from thefollowing x86 macro instructions: ADD, SUB, MOV, INC, and DEC. Thearithmetic opcode detector 521 routes the first and second sourceoperands 512, 513 either to the adder 525 or the subtractor 526 bycontrolling muxes 523, 524 via ADD/SUB#, 522. ADD/SUB#, 522 alsocontrols the routing of intermediate results via mux 527 to the updateforwarding cache.

If an addition micro instruction is detected, the opcode decoder 521routes the source operands 512, 513 to the adder 525, and the result ofthe addition operation, A+B, along with corresponding word enable,AWDEN, are provided to the update forwarding cache via ADDR OP 532 andWDEN 533. If a subtraction micro instruction is detected, the opcodedecoder 521 routes the source operands 512, 513 to the subtraction logic526, and the result of the subtraction operation, A−B, along withcorresponding word enable, SWDEN, are provided to the update forwardingcache via ADDR OP 532 and WDEN 533.

Now referring to FIG. 6, a table 600 is presented illustrating executionof an address-dependent micro instruction by a microprocessor accordingto the present invention as described with reference to FIGS. 3 through5. Three macro instructions, a first macro instruction, designated ADDEAX,25; a second macro instruction, designated SUB EBX,27; and a thirdmacro instruction, designated MOV ECX, [EAX]; are shown in the Translatecolumn of the table 600. For clarity of discussion, a columncorresponding to the Fetch stage 301 is not shown. The marks ***designate non-relevant instructions before or after the instructions ofinterest. Progression of instructions through noted stages of thepipeline is shown with respect to cycles of a pipeline clock.

The ordering of the three macro instructions in the Translate column isthe same as that discussed with reference to FIG. 2, and thusillustrates an address-dependency case which would otherwise result inan AGI. More specifically, the first macro instruction directs logic inthe execute stage 307 of the microprocessor 300 to add the contents ofregister EAX in the register file with a first immediate operand, 25,and to write back the result of the addition into destination registerEAX. The second macro instruction directs logic in the execute stage 307of the microprocessor 300 to subtract a second immediate operand, 27,from the contents of register EBX in the register file, and write backthe result of the subtraction into destination register EBX. The thirdmacro instruction directs the microprocessor 300 to load the contents ofa location in memory into register ECX. The address operand used togenerate the address of the memory location is prescribed withinregister EAX. And register EAX is the destination register for the finalresult of the addition operation prescribed by the first macroinstruction. Therefore, the third macro instruction is address-dependentupon the first macro instruction.

During cycle 1, the first macro instruction, ADD EAX,25, proceedsthrough the translate stage 302. Therein, the first macro instruction isdecoded into a first micro instruction, designated ADD EAX,EAX,25. Morespecifically, an opcode field, ADD, prescribes the operation that is toperformed, that is, to retrieve the contents of a source register, EAX,in the register stage 303, to add the contents of EAX with the firstimmediate operand, 25, and to write back the result of the additiongenerated in the execute stage 307 into destination register EAX.

During cycle 2, the first micro instruction proceeds through theregister stage 303. Therein, contents of register EAX are retrieved fromthe register file. In addition during cycle 2, the second macroinstruction, SUB EBX,27, proceeds through the translate stage 302.Therein, the second macro instruction is decoded into a second microinstruction, designated SUB EBX,EBX,27. More specifically, an opcodefield, SUB, prescribes the operation that is to performed, that is, toretrieve the contents of a source register, EBX, in the register stage303, to subtract the second immediate operand, 27, from the contents ofEBX, and to write back the result of the subtraction generated in theexecute stage 307 into destination register EBX.

During cycle 3, the first micro instruction proceeds through the addressstage 304. Because an applicable addition operation is prescribed by theopcode 511 of the first micro instruction, the opcode detection logic521 routes the contents of EAX and the first immediate operand, 25, tothe adder 525. The intermediate result of this addition along with wordenable data is muxed via buses 532, 533 to the update forwarding cache400. In addition, contents of the destination register field 514, EAX,are provided to the cache 400 via tag bus 531. Also during cycle 3, thesecond micro instruction proceeds through the register stage 303.Therein, the contents of register EBX are retrieved from the registerfile. In addition during cycle 3, the third macro instruction proceedsthrough the translate stage 302. Therein, the third macro instruction isdecoded into a third micro instruction, designated LD ECX, [EAX]. Morespecifically, an opcode field, LD, prescribes the operation that is toperformed, that is, to load the contents of a memory location intoregister ECX. The address operand used to compute the address of thememory location is contained within the update forwarding cache 400corresponding to a tag identifying register EAX as a destinationregister.

During cycle 4, the first micro instruction proceeds through the loadstage 305. Also during cycle 4, the second micro instruction proceedsthrough the address stage 304. Because a subtraction operation isprescribed by the opcode 511 of the second micro instruction, the opcodedetection logic 521 routes the contents of EBX and the second immediateoperand, 27, to the subtraction logic 526. The interim result of thissubtraction along with word enable data is muxed via buses 532, 533 tothe update forwarding cache 400. In addition, contents of thedestination register field 514, EBX, are provided to the cache 400 viatag bus 531. Also during cycle 4, in contrast to the example discussedwith reference to FIG. 2, interlock logic (not shown) within themicroprocessor 300 according to the present invention permits the thirdmicro instruction to proceed through the register stage 303 withoutincurring a stall-even though its address operand depends upon theresult of the first micro instruction. Within the register stage 303,the third micro instruction submits operand tag EAX to the updateforwarding cache 400. In response, since the intermediate result of thefirst micro instruction destined for register EAX is available withinthe cache 400, the address configuration logic 408 configures aspeculative address operand and provides the speculative address operandto the third micro instruction.

During cycle 5, the first and second micro instructions to proceedthrough the align stage 306 and the load stage 305, respectively. Inaddition during cycle 5, the third micro instruction proceeds throughthe address stage 304. Therein, the memory address for the loadoperation is computed by address calculation logic using the speculativeaddress operand for register EAX obtained from the update forwardingcache 400 during cycle 4.

During cycle 6, the first micro instruction proceeds through the executestage 307. Therein, the addition operation prescribed is performed and afinal result of the addition is generated. In addition during cycle 6,the second micro instruction proceeds through the align stage 306. Alsoduring cycle 6, the third micro instruction proceeds through the loadstage 305. Therein, a load operation is performed from memory using theaddress that was computed during cycle 5.

During cycles 7 through 9, the three micro instructions continue toproceed through subsequent stages of the microprocessor 300. And incontrast to the example discussed with reference to FIG. 2, theaddress-dependent micro instruction is not delayed. No AGIs are incurredbecause intermediate arithmetic results are computed by intermediatearithmetic result computation logic 500 when applicable instructionsproceed through the address stage 304 and speculative address operandsare provided to address-dependent micro instructions when they proceedthrough the register stage 303.

The present invention overcomes the problems associated with asignificant number of address dependency cases by providing a meanswhereby intermediate results of arithmetic operations are computed andretained, thereby allowing an address-dependent micro instruction to beprovided with a speculative address operand in a pipeline stageimmediately preceding the stage in which an address computation isrequired. As alluded to above, the operands obtained from an updateforwarding cache according to the present invention are referred to asspeculative address operands because they do not necessarily reflect acorrect operand value for use in an address calculation. For examplesuppose that an address-dependent micro instruction requires an operandfrom register AX where AX is the destination register prescribed by apreceding add instruction. Also suppose that the preceding addinstruction requires an operand from register BX in order to compute theresult that is destined for register AX. And furthermore suppose thatwhen the preceding add instruction proceeds through the address stage,the contents of BX are not yet available. This is in fact an example ofa multiple dependency case that is illustrated by the following sequenceof x86 macro instructions: MOV BX, [CX] followed by ADD AX,BX followedby MOV DX, [AX]. The AX operand required by the second move instructiondepends upon the result of the add instruction. And the add instructionrequires an operand from register BX that has to be first fetched frommemory by the first move instruction. It is almost certain that when theadd instruction proceeds through the address stage, the speculativeresult that is computed therein using the contents of BX will not beaccurate. Hence, the speculative result should not be used. Rather, inthe case of a multiple operand dependency, interlock logic should stallthe second move instruction.

Although the present invention and its objects, features, and advantageshave been described in detail, other embodiments are encompassed by theinvention. For example, the present invention has been particularlycharacterized in terms of a microprocessor pipeline comprising ninepipeline stages. Although a nine-stage pipeline is representative ofmost present day architectures, the present invention is not limited bythis configuration. As alluded to above, the number of interveningstages in the pipeline simply determine the number of intermediateoperand/result entries and corresponding register tag entries that arerequired in the update forwarding cache.

In addition, the present invention has been characterized in terms ofx86-compatible instructions for execution on an x86-compatiblemicroprocessor. It is noted, however, that the present inventioncomprehends any microprocessor, array processor, micro controller,signal processor, or similar device that processes address-dependentinstructions that depend upon preceding instructions directingarithmetic operations utilizing register/register or register/immediateoperands.

Moreover, the present invention comprehends microprocessor architecturesthat are different than the 32-bit embodiment described herein. A64-bit, or even a 128-bit intermediate result calculator and updateforwarding cache are comprehended by an embodiment having a modifiedaddress operand mode indicator and intermediate operand/result array.

Those skilled in the art should appreciate that they can readily use thedisclosed conception and specific embodiments as a basis for designingor modifying other structures for carrying out the same purposes of thepresent invention without departing from the spirit and scope of theinvention as defined by the appended claims.

What is claimed is:
 1. An apparatus in a pipeline microprocessor forproviding a speculative address operand associated with a result of afirst arithmetic operation, the first arithmetic operation beingprescribed by a first preceding micro instruction, the apparatuscomprising: speculative operand calculation logic within an addressstage of the pipeline microprocessor, configured to perform arithmeticoperations to generate interim results prior to when execute logicexecutes corresponding preceding micro instructions to generateassociated results, wherein said first preceding micro instruction isone of said corresponding preceding micro instructions; and an updateforwarding cache, coupled to said speculative operand calculation logic,configured to temporarily store said interim results, wherein anaddress-dependent micro instruction, upon entry into a previous registerstage can retrieve the speculative address operand, the speculativeaddress operand being configured from one of more of said interimresults, thereby permitting said address-dependent micro instruction toproceed without incurring delay; wherein the speculative address operandis to be obtained from the result that is to be generated when saidexecute logic executes the first preceding micro instruction, andwherein the result has not yet been generated by said execute logic andwritten to a register file for access by following micro instructions.2. The apparatus as recited in claim 1, wherein the result is requiredby said address-dependent micro instruction within said address stagefor computation of a memory address.
 3. The apparatus as recited inclaim 2, wherein the speculative address operand is provided by saidupdate forwarding cache to said address-dependent micro instructionprior to when said address-dependent micro instruction enters saidaddress stage, thereby allowing said address-dependent micro instructionto generate said memory address without incurring said delay.
 4. Theapparatus as recited in claim 3, wherein said speculative operandcalculation logic comprises: addition logic, configured sum a firstsource operand with a second source operand, said source operands beingprescribed by the first preceding micro instruction; and an arithmeticopcode decoder, configured to direct said addition logic to sum saidsource operands if the first arithmetic operation prescribed by thefirst preceding micro instruction is an addition operation.
 5. Theapparatus as recited in claim 4, wherein said speculative operandcalculation logic further comprises: subtraction logic, coupled to saidarithmetic opcode decoder, configured to subtract said second sourceoperand from said first source operand; wherein, if the first arithmeticoperation is a subtraction operation, said arithmetic opcode decoderdirects said subtraction logic to subtract said second source operandfrom said first source operand.
 6. A speculative operand apparatus in apipeline microprocessor, comprising: address stage logic, for generatinga memory address prescribed by an address-dependent micro instruction,wherein said address stage logic comprises: a speculative addressoperand calculator, for generating interim results by performingarithmetic operations prescribed by preceding micro instructions,wherein said interim results comprise a first interim result that isgenerated by performing a first arithmetic operation prescribed by afirst preceding micro instruction, and wherein said arithmeticoperations are performed prior to generation of final results byexecuting said preceding micro instructions; a speculative operandcache, coupled to said address stage logic, for temporarily storing saidinterim results; and speculative operand configuration logic, coupled tosaid speculative operand cache, for accessing one or more of saidinterim results to configure a speculative address operand correspondingto contents of a register prescribed by said address-dependent microinstruction, thereby permitting said memory address to be generated inlieu of a stall.
 7. The speculative operand apparatus as recited inclaim 6, wherein said final results are generated when said precedingmicro instructions are executed by execute logic within the pipelinemicroprocessor, and wherein said final results are stored incorresponding registers for access by following micro instructions. 8.The speculative operand apparatus as recited in claim 7, wherein saidspeculative address operand calculator comprises: an adder, for summinga first source operand with a second source operand, said sourceoperands being prescribed by said first preceding micro instruction; andarithmetic opcode decoding logic, configured to direct said adder to sumsaid source operands if said first arithmetic operation is an additionoperation.
 9. The speculative operand apparatus as recited in claim 8,wherein said speculative address operand calculator further comprises: asubtractor, coupled to said arithmetic opcode decoding logic, forsubtracting said second source operand from said first source operand;wherein, if said first arithmetic operation is a subtraction operation,said arithmetic opcode decoding logic directs said subtractor tosubtract said second source operand from said first source operand. 10.The speculative operand apparatus as recited in claim 9, wherein saidpreceding micro instructions correspond to one of the following x86macro instructions: ADD, MOV, INC, SUB, or DEC.